package com.douyin.service.impl;

import com.douyin.service.EmailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
@Service
@Slf4j
public class EmailServiceImpl implements EmailService {
    @Autowired
    private JavaMailSender javaMailSender;

    // 从配置文件中获取发件人邮箱
    @Value("${spring.mail.username}")
    private String fromEmailAddress;

    /**
     * 发送 HTML 格式的邮箱验证码
     *
     * @param to   收件人邮箱地址
     * @param code 六位数验证码
     */
    @Async
    public void sendVerificationCode(String to, String code) {
        try {
            // 创建一个 MimeMessage 实例，它是更复杂的邮件类型，支持HTML和附件
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();

            // 使用 MimeMessageHelper 来辅助构建邮件
            // 第二个参数 true 表示这是一个 multipart message，支持HTML
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

            // 1. 设置邮件的基本信息
            helper.setFrom(fromEmailAddress);
            helper.setTo(to);
            helper.setSubject("small_tiktok邮箱验证码"); // 邮件主题

            // 2. 构建并设置邮件的HTML内容
            String htmlContent = buildEmailContent(code);
            helper.setText(htmlContent, true); // 第二个参数 true 表示邮件内容是HTML

            // 3. 发送邮件
            javaMailSender.send(mimeMessage);
            log.info("验证码邮件已成功发送至: {}", to);

        } catch (MessagingException e) {
            log.error("发送验证码邮件时发生异常，收件人: {}", to, e);
            // 这里可以根据业务需求，抛出自定义异常或进行其他处理
        }
    }

    /**
     * 构建邮件内容的HTML模板
     * * @param code 验证码
     * @return 邮件HTML字符串
     */
    private String buildEmailContent(String code) {
        // 为了方便，这里使用字符串拼接。在实际项目中，更推荐使用模板引擎如 Thymeleaf 或 FreeMarker
        String htmlTemplate = "<div style=\"font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 20px auto; border: 1px solid #ddd; border-radius: 8px; overflow: hidden;\">" +
                "  <div style=\"background-color: #4A90E2; padding: 20px; text-align: center; color: white; font-size: 24px;\">" +
                "    <strong>您的验证码</strong>" +
                "  </div>" +
                "  <div style=\"padding: 30px;\">" +
                "    <p>尊敬的用户，您好！</p>" +
                "    <p>您正在进行邮箱验证操作，您的验证码是：</p>" +
                "    <p style=\"font-size: 32px; font-weight: bold; text-align: center; color: #4A90E2; letter-spacing: 4px; margin: 20px 0; background-color: #f2f2f2; padding: 15px; border-radius: 4px;\">" +
                "      %s" +
                "    </p>" +
                "    <p>此验证码将在 <strong>2分钟</strong> 内失效。请尽快完成验证。</p>" +
                "    <p>如果此操作不是由您本人进行的，请忽略此邮件，您的账户是安全的。</p>" +
                "    <hr style=\"border: none; border-top: 1px solid #eee; margin: 20px 0;\">" +
                "    <p style=\"font-size: 12px; color: #999;\">" +
                "      此为系统自动发送的邮件，请勿直接回复。<br>" +
                "      © %d small_tiktok" +
                "    </p>" +
                "  </div>" +
                "</div>";

        // 填充验证码和年份
        return String.format(htmlTemplate, code, java.time.Year.now().getValue());
    }
}
